package com.xbongbong.pay.platform.wechatpay.pojo.request.h5;

import com.alibaba.fastjson.annotation.JSONField;
import com.xbongbong.pay.platform.wechatpay.pojo.request.WeChatBaseRequest;
import lombok.Getter;
import lombok.Setter;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 查询退款 请求
 * @author 魏荣杰
 * @date 2021/1/7 16:26
 * @since
 * @version
 */
@Setter
@Getter
public class WeChatH5QueryRefundRequest extends WeChatBaseRequest {
    private static final long serialVersionUID = -7314878261716904210L;

    /**
     * 商户申请的公众号/小程序或者移动应用对应的APPID
     * 示例值：wx8888888888888888
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "appid")
    private String appId;

    /**
     * 微信支付分配的商户号
     * 示例值：1900000109
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "mch_id")
    private String mchId;

    /**
     * 微信分配的子商户应用ID，如需在支付完成后获取sub_openid则此参数必传。
     * 注意：仅适用于服务商模式
     * 示例值：wx8888888888888888
     */
    @Size(min = 1, max = 32)
    @JSONField(name = "sub_appid")
    private String subAppId;

    /**
     * 微信支付分配的子商户号
     * 注意：仅适用于服务商模式
     * 示例值：1900000109
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "sub_mch_id")
    private String subMchId;
    /**
     * 随机字符串，不长于32位。推荐随机数生成算法
     * 示例值：5K8264ILTKCH16CQ2502SI8ZNMTM67VS
     */
    @NotBlank
    @Size(min = 1, max = 32)
    @JSONField(name = "nonce_str")
    private String nonceStr;
    /**
     * 签名，详见签名生成算法
     * 示例值：C380BEC2BFD727A4B6845133519F3AD6
     */
    @NotBlank
    @Size(min = 1, max = 64)
    private String sign;
    /**
     * 微信退款单号
     * 注意：查询的优先级是： 微信退款单号 > 商户退款单号 > 微信支付订单号 > 商户订单号
     * 示例值：1217752501201407033233368018
     */
    @Size(min = 1, max = 64)
    @JSONField(name = "refund_id")
    private String refundId;

    /**
     * 商户系统内部的退款单号，商户系统内部唯一，只能是数字、大小写字母_-|*@ ，同一退款单号多次请求只退一笔。
     * 示例值：1217752501201407033233368018
     */
    @Size(min = 1, max = 32)
    @JSONField(name = "out_refund_no")
    private String outRefundNo;
    /**
     * 微信的订单号，优先使用
     * 示例值：1217752501201407033233368018
     */
    @Size(min = 1, max = 32)
    @JSONField(name = "transaction_id")
    private String transactionId;

    /**
     * 商户系统内部订单号，要求32个字符内，只能是数字、大小写字母_-|*@ ，且在同一个商户号下唯一。
     * 示例值：1217752501201407033233368018
     */
    @Size(min = 1, max = 32)
    @JSONField(name = "out_trade_no")
    private String outTradeNo;

    /**
     * 偏移量，当部分退款次数超过10次时可使用，表示返回的查询结果从这个偏移量开始取记录
     * 示例值：15
     */
    private Integer offset;


}
